/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import java.util.StringTokenizer;

/**
 *
 * @author Bartek
 */
public class Kalendarz {

    private int godzina_roz;
    private int minuty_roz;
    private int godzina_zak;
    private int minuty_zak;
    private int id_lekarz;
    private int id_specjalizacji;
    private int status_rezerwacji;
    private int id_wizyty;
    private int id_user;
    

    public String[] godziny_przyjec(String godz_roz, String godz_zak, int czas_przyjec) {
        StringTokenizer k = new StringTokenizer(godz_roz, ":");
        StringTokenizer t = new StringTokenizer(godz_zak, ":");
        godzina_roz = Integer.parseInt(k.nextToken());
        minuty_roz = Integer.parseInt(k.nextToken());
        godzina_zak = Integer.parseInt(t.nextToken());
        minuty_zak = Integer.parseInt(t.nextToken());
        int godziny = godzina_zak - godzina_roz - 1;
        int minuta = 60 - minuty_roz + minuty_zak;
        double wielkosc = (((godziny * 60) + minuta) / czas_przyjec);
        String tab[] = new String[(int) wielkosc];

        for (int i = 0; i < tab.length; i++) {
            if (i == 0) {
                tab[i] = godzina_roz + ":" + minuty_roz + "0";
            } else {
                minuty_roz += czas_przyjec;

                while (minuty_roz >= 60) {
                    minuty_roz -= 60;
                    godzina_roz++;

                }
                if (minuty_roz == 0) {
                    tab[i] = godzina_roz + ":" + minuty_roz + "0";
                } else {
                    tab[i] = godzina_roz + ":" + minuty_roz;
                }
            }
        }
        return tab;



    }

    public void przebiegDni(int dzien_p, int miesiac_p, int rok_p, int dzien_k, int miesiac_k, int rok_k, int id_dnia, int id_lekarz) throws SQLException {
        Connection conn = Polaczenie.getConnection();
        try {
            Statement stat = (Statement) conn.createStatement();
            int dni[] = this.tablicaDniPrzyjec(id_lekarz);

            while (dzien_p != dzien_k || miesiac_p != miesiac_k || rok_p != rok_k) {

                if (dni[id_dnia - 1] > 0) {
                    ResultSet rs = stat.executeQuery("SELECT * FROM `godzin_przyjec` WHERE id_lekarz=" + id_lekarz + " && id_Dzien=" + id_dnia + ";");
                    rs.next();
                    String tab[] = this.godziny_przyjec(rs.getString(3).substring(0, 5), rs.getString(4).substring(0, 5), 30);
                    for (int i = 0; i < tab.length; i++) {
                        stat.execute("INSERT INTO wizyty (id_lekarz,data,godzina) VALUES  (" + id_lekarz + ",'" + rok_p + "." + miesiac_p + "." + dzien_p + "','" + tab[i] + "');");

                    }
                }

                dzien_p++;
                id_dnia++;
                if (miesiac_p > 12) {

                    miesiac_p -= 12;
                    rok_p++;
                }

                if (miesiac_p == 1 || miesiac_p == 3 || miesiac_p == 5 || miesiac_p == 7 || miesiac_p == 8 || miesiac_p == 10 || miesiac_p == 12) {
                    if (dzien_p > 31) {
                        dzien_p -= 31;
                        miesiac_p++;
                    }
                } else if (miesiac_p == 4 || miesiac_p == 6 || miesiac_p == 9 || miesiac_p == 11) {
                    if (dzien_p > 30) {
                        dzien_p -= 30;
                        miesiac_p++;
                    }
                } else if (miesiac_p == 2 && rok_p % 4 == 0) {
                    if (dzien_p > 29) {
                        dzien_p -= 29;
                        miesiac_p++;
                    }
                } else if (miesiac_p == 2 && rok_p % 4 != 0) {
                    if (dzien_p > 28) {
                        dzien_p -= 28;
                        miesiac_p++;
                    }

                }
                if (id_dnia > 7) {
                    id_dnia = 1;
                }


            }
        } finally {
        }
    }

    public int[] tablicaDniPrzyjec(int id_lekarz) throws SQLException {
        Connection conn = Polaczenie.getConnection();
        int tab[] = new int[7];
        try {
            Statement stat = (Statement) conn.createStatement();
            for (int i = 1; i < 8; i++) {

                ResultSet rs4 = stat.executeQuery("SELECT * FROM `godzin_przyjec` WHERE id_lekarz=" + id_lekarz + " && id_Dzien=" + i + ";");
                boolean czydzien = rs4.next();
                if (czydzien == true) {
                    tab[i - 1] = i;
                } else if (czydzien == false) {
                }

                rs4.close();
            }





        } finally {
            conn.close();
        }
        return tab;
    }

    public void najblizszaWizyta(int id_pacjenta) throws SQLException {
        Connection conn = Polaczenie.getConnection();
        Dane_user user = new Dane_user();
        try {
            Scanner in = new Scanner(System.in);
            Statement stat = (Statement) conn.createStatement();
             ResultSet rs0 = stat.executeQuery("SELECT count(*) FROM dane_lekarz;");
            rs0.next();
            int liczba = rs0.getInt(1);
            
            for(int j = 0 ;j<liczba;j++){
                ResultSet rs = stat.executeQuery("SELECT * FROM dane_lekarz limit "+j+",1;");
                rs.next();
                id_lekarz=rs.getInt(1);
                id_specjalizacji=rs.getInt(2);
                id_user=rs.getInt(3);


                ResultSet rs2 = stat.executeQuery("SELECT nazwa FROM specjalizacje_lekarzy WHERE id_specjalizacji="+id_specjalizacji+";");
                rs2.next();
                System.out.println("----------------------------");
                System.out.format("%s Dr. %s %s Specjalizacja:%s\n",id_lekarz,user.imie(id_user),user.nazwisko(id_user),rs2.getString(1));
            }
            
                System.out.println();
                System.out.println();
                System.out.println("Wpisz nr lekarza(znajduje się od przed słowem Dr.");
                int lekarz = in.nextInt();
                ResultSet rs3 = stat.executeQuery("SELECT count(*) FROM `wizyty` WHERE id_lekarz="+lekarz+" && id=0;");
                rs3.next();
                int liczba_wizyt = rs3.getInt(1);
                if(liczba_wizyt>0){
                ResultSet rs4 = stat.executeQuery("SELECT * FROM `wizyty` WHERE id_lekarz="+lekarz+" && id=0;");
                rs4.next();
              
                status_rezerwacji=0;
                for(int i=0;i<liczba_wizyt;i++){
                    ResultSet rs5 = stat.executeQuery("SELECT * FROM `wizyty` WHERE id_lekarz="+lekarz+" && id=0 limit "+i+",1;");
                    rs5.next();
                    id_wizyty=rs5.getInt(1);
                    System.out.format("Czy pasuje ci termin: %s.%s.%s godzina %s \n",rs5.getString(3).substring(8),rs5.getString(3).substring(5,7),rs5.getString(3).substring(0,4),rs5.getString(4).substring(0,5));
                    System.out.println("Jeśli tak to wpisz liczbę 1 a jeśli chcesz inny termin wpisz 0.");
                    status_rezerwacji=in.nextInt();
                    if(status_rezerwacji==1){
                        stat.execute("UPDATE wizyty SET id="+id_pacjenta+" WHERE id_wizyty="+id_wizyty+";");
                        System.out.format("Został/a pan/pani zapisana na wizyte\n");
                        break;
                    }
                }
                if(status_rezerwacji==0){
                    System.out.println("W terminarzu nie ma wolnych już wizyt skontaktuj się z przychodnią telefonicznie w celu ustawienia dalszego terminu");
                }
                }else{
                    System.out.println("W terminarzu nie ma wolnych już wizyt skontaktuj się z przychodnią telefonicznie w celu ustawienia dalszego terminu");
                }
                
                
        } finally {
            conn.close();
        }
    }
}
